package control;

import control.Ambito.Metodos;

public class Control {
	
	
	public Control(){
		new Ambito();
	}
	
	public void nuevoAmbito(){
		Ambito.agregarAmbitoHijo();
	}
	
	public boolean terminarAmbito(){
		return Ambito.retornarAmbito();
	}
	
	public boolean agregarSimbolo(String id, Tipo tipo){
		return Ambito.agregarSimbolo(id, tipo);
	}
	
	public boolean agregarMetodo(String id, Tipo tipo){
		return Ambito.agregarMetodo(id, tipo);
	}
	
	public boolean agregarTipo(String id, Tipo tipo){
		return Ambito.agregarTipo(id, tipo);
	}
	
	public Tipo encontrar(String id, Ambito ambito){

		if (ambito==null) return null;
		Tipo t = ambito.simbolos.get(id);
		if (t==null){
			return encontrar(id,ambito.padre);
		}
		else return t;
	}
	
	public Tipo encontrarTipo(String id){
		return encontrarTipo(id, Ambito.actual);
	}
	public Tipo encontrarTipo(String id, Ambito ambito){

		if (ambito==null) return null;
		Tipo t = ambito.tipos.get(id);
		if (t==null){
			return encontrarTipo(id,ambito.padre);
		}
		else return t;
	}
	
	public Tipo encontrar(String id){
		return encontrar(id, Ambito.actual);
	}
	
	public Tipo encontrarMetodo(String id){
		return Metodos.get(id);
	}
	
	public String nombreTipo(Tipo tipo){
		if (tipo==null) return null;
		if (tipo.darTipo()==3 || tipo.darTipo()== 4) return tipo.nombre;
		else if (tipo.darTipo()==0) return "int";
		else if (tipo.darTipo()==1) return "char";
		else if (tipo.darTipo()==2) return "boolean";
		else return null;
	}
	

}
